/**
 * Perform the element default action.
 *
 * @param {JSEvent} event the event that triggered the action
 *
 * @properties={typeid:24,uuid:"671EFEDF-3F22-49A5-BD7F-8D4113939569"}
 * @AllowToRunInFind
 */
function continuar(event) {
	
	elements.errores.removeAllTabs()
	var res = globals.chequeaVariables()
	if (res[0] == 1)
	{
		globals.DIALOGS.showWarningDialog('Aviso','Error en variables globales : '+res[1],'OK')
		//return  
	}

	var $tipo_asiento = 1
	if (globals.control_asientos_prov($tipo_asiento,globals.gMesAsientos,globals.gAnioAsientos) == 0 )
	{   // Si da 0 fue un error o no quiere seguir adelante
		return
	}

	var $cols		= ['fecha','documento','error']
	/** @type {JSFoundSet<db:/contable/asiento_prov_cab>} */ 
	var $provisorio = databaseManager.getFoundSet('contable','asiento_prov_cab')
	/** @type {JSFoundSet<db:/infocom/ctacte_pr>} */ 
	var $cta_cte 	= databaseManager.getFoundSet('infocom','ctacte_pr')
	var $errores 	= databaseManager.createEmptyDataSet( 0, $cols )
	
	if ($cta_cte.find()== false)
	{
		globals.DIALOGS.showWarningDialog('Aviso','Ocurrió un error al buscar movimientos','OK')
		return
	}
	
	var $fecha_desde 	= new Date(globals.gAnioAsientos, globals.gMesAsientos-1,1,0,0,0,0)
	var $fecha_hasta 	= new Date(globals.gAnioAsientos, globals.gMesAsientos,0,23,59,59,996)
	var rango 			= utils.dateFormat($fecha_desde,'dd-MM-yyyy') + '...'+ utils.dateFormat($fecha_hasta,'dd-MM-yyyy')
	$cta_cte.fecha_mov 	= '#' + rango + '|dd-MM-yyyy'

	$cta_cte.ctacte_pr_to_tab_mov_pr.tipo_asiento_id = $tipo_asiento  
	
	var cuantos = $cta_cte.search()
	if (cuantos == 0)
	{
		globals.DIALOGS.showWarningDialog('Aviso','No se encontraron movimientos con esas condiciones','OK')
		return
	}
	databaseManager.setAutoSave(false)
	var $cant = databaseManager.getFoundSetCount($cta_cte)

	for (var i = 1 ; i <= $cant ; i++)
	{
		var $rcd = $cta_cte.getRecord(i)
		var $texto = utils.stringTrim($rcd.ctacte_pr_to_proveedor.razon_social) + ' Fc'
		tipoAsiento_1($rcd , $provisorio,$texto,$errores, $tipo_asiento)
	}
	if ($errores.getMaxRowIndex() > 0)
	{
		var $fecha_hoy 	= utils.dateFormat(new Date(),'dd-MM-yyyy')
		var $periodo	= 'Desde ' + utils.dateFormat($fecha_desde,'dd-MM-yyyy') + ' hasta '  + utils.dateFormat($fecha_hasta,'dd-MM-yyyy')
		var $titulo		= 'Asiento Compras - ' + $periodo + ' - Fecha Proceso ' + $fecha_hoy
		globals.crearFormErrores('asiento_compras_1',$errores,$cols,$titulo)
	}
	databaseManager.startTransaction()
	if (databaseManager.saveData()) 
	{
		databaseManager.setAutoSave(true)
		databaseManager.commitTransaction()
		globals.DIALOGS.showInfoDialog('Aviso','Proceso terminado con exito','OK')
	}
	else
	{
		databaseManager.rollbackTransaction()
		globals.DIALOGS.showWarningDialog('Aviso','Ocurrió un error al intentar grabar los cambios. El proceso está incompleto','OK')
	}
}

/**
 * @param {JSRecord<db:/infocom/ctacte_pr>} $rcd
 * @param {JSFoundSet<db:/contable/asiento_prov_cab>} $provisorio
 * @param {String} $texto
 * @param {JSDataSet} $errores
 * @param {Number} $tipo_asiento
 * 
 * @properties={typeid:24,uuid:"7567CC5F-C64C-4077-ACC2-B5CDC7821129"}
 */
function tipoAsiento_1($rcd , $provisorio, $texto, $errores, $tipo_asiento)
{
	$provisorio.newRecord()
	$provisorio.moneda 					= 'P'
	$provisorio.moneda_carga 			= 1
	$provisorio.hizo 					= globals.gUsuarioID
	$provisorio.tipo_actualizacion 		= globals.z_conf_asiento_normal
	$provisorio.empresa					= globals.gUservID
	$provisorio.fecha 					= $rcd.fecha_mov
	$provisorio.texto 					= $texto + ' - '+ $rcd.letra + '-'+$rcd.sucursal+'-'+$rcd.nro_factura+' - '+$rcd.concepto
	$provisorio.subdiario_id 			= 2  // compras
	$provisorio.mes						= $rcd.fecha_mov.getMonth()+1
	$provisorio.anio					= $rcd.fecha_mov.getFullYear()
	$provisorio.tipo_asiento_id 		= $tipo_asiento
	
	globals.gtotal_asiento = null
	
	var $dtls = obtenerDetalles($rcd, $errores, $provisorio.texto)
	$provisorio.total = globals.gtotal_asiento
	
	for (var i = 0 ; i < $dtls.length ; i++)
	{
		var det = $provisorio.asiento_prov_cab_to_asiento_prov
		
		det.newRecord()
		
		det.columna 	= $dtls[i][0]
		det.cuentas_id 	= $dtls[i][1]
		det.importe 	= $dtls[i][2]
		det.numero		= 0
		det.empresa		= globals.gUservID
		det.centro		= 1
		det.division	= 1
		det.leyenda		= null
		det.mes			= $provisorio.mes
		det.anio		= $provisorio.anio
	}
}

/**
 * @param {JSRecord<db:/infocom/ctacte_pr>} $rcd
 * @param {JSDataSet} $errores
 * @param {String} $texto
 * 
 * @properties={typeid:24,uuid:"B1E5CA47-6061-41AB-985F-076C1955EEFE"}
 */
function obtenerDetalles($rcd, $errores, $texto)
{
	var dtls = new Array()
	var tot_d = 0
	var tot_h = 0
	
	 //asiento de facturas
	var cta
	var error
	var imp
	
	var letra 		= 'D'
	var contrario 	= 'H'
		
	if ($rcd.ctacte_pr_to_tab_mov_pr.d_h == 1)
	{
		letra 		= 'H'
		contrario 	= 'D'
	}
	
	if ($rcd.ctacte_pr_to_ctacte_pr_contable.getSize() > 0)
	{
		for (var i = 1 ; i <= $rcd.ctacte_pr_to_ctacte_pr_contable.getSize() ; i++)
		{
			$rcd.ctacte_pr_to_ctacte_pr_contable.setSelectedIndex(i)
			cta = $rcd.ctacte_pr_to_ctacte_pr_contable.ctacte_pr_id
			imp = $rcd.ctacte_pr_to_ctacte_pr_contable.importe
			tot_d += imp
			dtls[dtls.length] = new Array(letra, cta, imp)
		}
	}
	else
	{
		if ($rcd.plancta_id_gastos == 0 || $rcd.plancta_id_gastos == null)
		{
			if ($rcd.ctacte_pr_to_proveedor)
			{
				if($rcd.ctacte_pr_to_proveedor.plancta_id_gastos==null) 
				{
					cta = 999999
					error = new Array(utils.dateFormat($rcd.fecha_mov,'dd-MM-yyyy'), $texto, 'Cuenta de gastos no cargada en proveedor ' + $rcd.proveedor_id + ' - ' + $rcd.ctacte_pr_to_proveedor.razon_social)
					$errores.addRow(error)
				} 
				else
					cta = $rcd.ctacte_pr_to_proveedor.plancta_id_gastos
			}
			else
			{
				cta = 999999
				error = new Array(utils.dateFormat($rcd.fecha_mov,'dd-MM-yyyy'), $texto, 'Error en relacion entre cta cte y proveedor' + $rcd.proveedor_id + ' - ' + $rcd.ctacte_pr_to_proveedor.razon_social )
				$errores.addRow(error)
			}
		}
		else
			cta = $rcd.plancta_id_gastos
		
		imp = $rcd.neto + $rcd.neto_2 + $rcd.neto_3 + $rcd.neto_no_gravado
		
		if (imp > 0)
		{
			tot_d += imp
			dtls[dtls.length] = new Array(letra, cta, imp)
		}
	}
	
	cta		= globals.zplan_iva_cf
	imp 	= $rcd.iva + $rcd.iva_2 + $rcd.iva_3

	if (imp > 0)
	{
		tot_d += imp
		dtls[dtls.length] = new Array(letra, cta, imp)
	}
	
	cta 	= globals.zplan_iva_percep
	imp		= $rcd.iva_percep
	if (imp > 0)
	{
		tot_d += imp
		dtls[dtls.length] = new Array(letra, cta, imp)
	}
	
	cta		= globals.zplan_ing_brut_percep
	imp		= $rcd.ing_brut_percep
	if (imp > 0)
	{
		tot_d += imp
		dtls[dtls.length] = new Array(letra, cta, imp)
	}

	cta		= globals.zplan_itc
	imp		= $rcd.itc
	if (imp > 0)
	{
		tot_d += imp
		dtls[dtls.length] = new Array(letra, cta, imp)
	}
	
	cta		= globals.zplan_ganancias_percep
	imp		= $rcd.ganancias_percep
	if (imp > 0)
	{
		tot_d += imp
		dtls[dtls.length] = new Array(letra, cta, imp)
	}

	if ($rcd.ctacte_pr_to_proveedor)
	{
		cta = 999999
		if ($rcd.ctacte_pr_to_proveedor.plancta_id == null) 
		{
			error = new Array(utils.dateFormat($rcd.fecha_mov,'dd-MM-yyyy'), $texto, 'Proveedor ' + $rcd.proveedor_id + ' - ' + $rcd.ctacte_pr_to_proveedor.razon_social + ' no tiene cuenta cargada')
			$errores.addRow(error)
		} 
		else
			cta	= $rcd.ctacte_pr_to_proveedor.plancta_id
		
		imp	= $rcd.importe
		if (imp > 0)
		{
			tot_h += imp
			dtls[dtls.length] 	= new Array(contrario, cta, imp)
		}
	}
	else
	{
		error = new Array(utils.dateFormat($rcd.fecha_mov,'dd-MM-yyyy'), $texto, 'Error en relacion entre cta cte y proveedor ' + $rcd.ctacte_pr_to_proveedor.razon_social)
		$errores.addRow(error)
	}
	
	if(Math.abs(tot_h - tot_d) > 0.001)
	{
		error = new Array(utils.dateFormat($rcd.fecha_mov,'dd-MM-yyyy'), $texto, 'Debe distinto a haber')
		$errores.addRow(error)
	}
	else
		globals.gtotal_asiento = tot_d
	return dtls
}
